package com.example.demo.剑指offer;

import com.example.demo.剑指offer.删除链表的节点.ListNode;

/**
 * @author：zzc
 * @date: 2022/8/19
 */
public class 反转链表 {

    //定义一个函数，输入一个链表的头节点，反转该链表并输出反转后链表的头节点。
    //
    //
    //
    //示例:
    //
    //输入: 1->2->3->4->5->NULL
    //输出: 5->4->3->2->1->NULL

    //https://leetcode.cn/problems/reverse-linked-list/

    //解法
    //定义指针 pre，cur 分别指向 null 和头节点。
    //
    //遍历链表，将 cur.next 临时保存到 t 中，然后改变指针 cur 指向的节点的指向，将其指向 pre 指针指向的节点，即 cur.next = pre。然后 pre 指针指向 cur，cur 指针往前走。
    //
    //当遍历结束后，返回 pre 指针即可。

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     * int val;
     * ListNode next;
     * ListNode(int x) { val = x; }
     * }
     */
    class Solution {

        public ListNode reverseList(ListNode head) {
            ListNode pre = null, cur = head;
            while (cur != null) {
                ListNode t = cur.next;
                cur.next = pre;
                pre = cur;
                cur = t;
            }
            return pre;
        }
    }


}
